package com.c5p1ng.groovy.service;

import com.c5p1ng.groovy.bean.RuleEngineExecuteContext;
import com.c5p1ng.groovy.bean.ScriptVariable;
import com.c5p1ng.groovy.pojo.StrategyScriptEntity;

import java.util.List;

/**
 * 脚本执行服务
 */
public interface GroovyScriptService {
    /**
     * 执行groovy脚本
     * @param context
     * @param strategyId
     * @return
     */
    Object fragmentEval(RuleEngineExecuteContext context, Integer strategyId);

    /**
     * 是否执行脚本
     * @param context
     * @param strategyId
     * @return
     */
    boolean booleanScript(RuleEngineExecuteContext context,Integer strategyId);

    /**
     * 存储执行脚本片段和变量
     * @param strategyId
     * @param script
     * @param variables
     * @param author
     */
    void saveVariables(Integer strategyId, String script, List<ScriptVariable> variables, String author);

    /**
     * 根据策略id查询对应表达式片段信息
     * @param strategyId
     * @return
     */
    StrategyScriptEntity queryByStrategyId(Integer strategyId);

    /**
     * 根据策略id集查询对应表达式片段信息列表
     * @param strategyIds
     * @return
     */
    List<StrategyScriptEntity> queryByStrategyIds(List<Integer> strategyIds);

    /**
     * 测试脚本
     * @param scriptText
     * @return
     */
    boolean scriptTest(String scriptText);

    /**
     * 加载数据库所有脚本
     */
    void loadScript();

    /**
     * 加载数据库所有未停用的脚本
     * @param isInit 是否初始化调用
     * @return 成功加载脚本个数
     */
    int loadValidScript(boolean isInit);
}
